Linux Magic SysRq
·
在 Linux 中,Magic SysRq(Magic System Request)键 是一个组合键机制,用于在系统严重故障(如死机、挂起等)时发送低级命令给内核进行恢复或诊断操作。它能在几乎所有情况下(包括部分内核崩溃)执行,如同步磁盘、重启、杀死进程等。
前提条件检查
内核是否编译支持Magic SysRq 检查当前运行状 0:全部禁用 1:全部启用 其他值(如 176、438):按位启用(详见附录)
zcat /proc/config.gz | grep CONFIG_MAGIC_SYSRQ
cat /boot/config-$(uname -r) | grep -i config_magic_sysrq
cat /proc/sys/kernel/sysrq
发行版Magic SysRq使用情况
很多Linux发行版中是默认启用的,但具体情况可能会有所不同。例如:
- Debian及其衍生发行版(如Ubuntu)通常默认开启Magic SysRq功能。
- Arch Linux及其相关发行版(如Manjaro)则默认情况下不开启Magic SysRq功能,用户需要手动进行配置以启用它。 如果你不确定某个特定的Linux发行版是否默认启用了Magic SysRq,可以通过以下命令来检查当前系统的Magic SysRq状态:
cat /proc/sys/kernel/sysrq
如果输出为1,则表示所有Magic SysRq功能都已启用;如果输出为0,则表示SysRq被禁用。其他数值表示部分功能被启用,具体的数值含义可以参考内核文档或通过搜索引擎查找对应的解释。
要临时启用所有的Magic SysRq功能,可以使用以下命令:
echo 1 | sudo tee /proc/sys/kernel/sysrq
对于永久性更改,可以在/etc/sysctl.conf文件中添加或者修改如下行:
kernel.sysrq = 1
然后运行sudo sysctl -p使更改生效,或者重启系统。不同的发行版可能有不同的配置文件位置和方法,请根据实际情况调整。
如何使用Magic SysRq
键盘组合方式(本地终端使用)
Alt + SysRq + <command_key>
SysRq 键通常和 Print Screen 是同一个键 在笔记本上可能需要额外按 Fn 键
常见命令键列表(<command_key>):
键 | 功能 |
---|---|
b | 立即重启系统(ReBoot) |
o | 立即关闭系统(pOwer off) |
s | 立刻将所有挂载的文件系统同步(Sync) |
u | 立刻将文件系统 remount 为只读(Umount) |
e | 向所有终端进程发送 SIGTERM(tErminate) |
i | 向所有终端进程发送 SIGKILL(kIll) |
r | 将键盘控制权从 X Server 还原到控制台(Raw mode) |
k | 杀死当前控制台上的所有进程(Kill) |
h | 显示可用命令帮助(Help) |
通过 /proc/sysrq-trigger 发送命令(远程使用)
如果你是通过 SSH 或串口登录的,可以使用:
echo <command_key> | sudo tee /proc/sysrq-trigger
echo b | sudo tee /proc/sysrq-trigger # 立即重启
echo s | sudo tee /proc/sysrq-trigger # 同步磁盘
典型场景:安全重启挂死系统
建议使用“REISUB”组合重启挂住的系统:
Alt + SysRq + R
Alt + SysRq + E
Alt + SysRq + I
Alt + SysRq + S
Alt + SysRq + U
Alt + SysRq + B
含义如下:
步骤 | 含义 |
---|---|
R | 恢复键盘控制权 |
E | 终止所有进程 |
I | 杀死所有进程 |
S | 同步磁盘 |
U | 卸载磁盘(只读) |
B | 重启系统 |
每按一次组合键后,等1-2秒再继续下一步,确保命令有时间生效。
附录:sysrq 按位权限含义(对应 /proc/sys/kernel/sysrq)
值 | 功能 |
---|---|
1 | 启用所有功能 |
2 | 控制进程的信号发送 |
4 | 挂载的文件系统 sync |
8 | 立即重启或关机 |
16 | Dump tasks 信息 |
32 | 设置日志等级 |
64 | 终止进程 |
128 | Kill 当前控制台进程 |
常见值: 176 = 128 + 32 + 16:允许 kill、日志、重启
438 = 128 + 64 + 8 + 4 + 2 + 32:广泛启用但不包含 r
cat /proc/sys/kernel/sysrq | xxd -b